/* Atomkey Laboratories Copyright (c) 2019 / June 2019 For: Big Spring Amateur Radio Club Spring/fall Project 2019 */ #define DEFAULT_IDLE_LIMIT 10000 int haptic_pin = 2; // vibration emitter - can interfere with detector int detect_pin = 5; // analog 5 ~ corresponding pin 11 for atmel 328p int detect_val = 0; // analog value for detection level bool idle_state = false; int idle_limit = DEFAULT_IDLE_LIMIT; // number of iteration before idle_state is set TRUE int idle_fader = 1; // toggle fader up or down by setting + or - int fader_value = 15; // the fade value of the BLUE led int Blue_led = 10, // 16 Green_led = 9, // 15 Yellow_led = 6, // 12 Red1_led = 5, // 11 Red2_led = 3; // 5 int led_group[] = { Blue_led, Green_led, Yellow_led, Red1_led, Red2_led } ; void setup() // =========================== startup routine { Serial.begin(9600); // for debug data pinMode(haptic_pin, OUTPUT); // for haptic feedback (vibration) pinMode(detect_pin, INPUT); // setup pintouts for(int i = 4; i >=0; i--) pinMode(led_group[i], OUTPUT); digitalWrite(haptic_pin, LOW); // init startup states analogWrite(Blue_led, 125); analogWrite(Green_led, 125); analogWrite(Yellow_led, 125); analogWrite(Red1_led, 125); analogWrite(Red2_led, 125); delay(100); for(int i = 4; i >=0; i--) // turn off the leds in sequence { analogWrite(led_group[i], 0); delay(250); } for(int i = 0; i <5; i++) // turn on the leds in sequence { analogWrite(led_group[i], 125); delay(250); } for(int i = 4; i >=0; i--) // turn off all leds analogWrite(led_group[i], 0); } void loop() // =========================== start looking for em fields { //setup(); // uncomment for LED diags if(!idle_state) idle_limit--; // decrease idle until zero and start fader below detect_val = 0; detect_val = analogRead(detect_pin); // get a value from analog in if(detect_val < 150) { // [development code] digitalWrite(haptic_pin, LOW); // disable vibrate } if(detect_val >= 1) { detect_val = constrain(detect_val, 1, 20); // these ranges/values can be detect_val = map(detect_val, 1, 20, 1, 255); // used to calibrate the response if(detect_val > 60) { analogWrite(Blue_led, detect_val); idle_state = false; // disable idle fader if it is on idle_limit = DEFAULT_IDLE_LIMIT; fader_value = 15; } if(detect_val > 100) analogWrite(Green_led, detect_val); if(detect_val > 150) { analogWrite(Yellow_led, detect_val); digitalWrite(haptic_pin, HIGH); // vibrate [developement code] } if(detect_val > 200) analogWrite(Red1_led, detect_val); if(detect_val > 240) analogWrite(Red2_led, detect_val); } else { for(int i = 4; i >=0; i--) analogWrite(led_group[i], 0); // clear led meter } if(!idle_limit) // start the fader { idle_state = true; analogWrite(Blue_led, fader_value); if(fader_value > 120 || fader_value < 15) idle_fader = idle_fader * -1; fader_value = fader_value + idle_fader; delay(5); // changes speed of fader; //Serial.println("---"); //Serial.println(fader_value); //Serial.println(idle_fader); //Serial.println(idle_limit); } //Serial.println(detect_val); }